#ifndef __API_EQ_DRC_H
#define __API_EQ_DRC_H


//DRC初始化相关结构体
typedef struct {
    int threshold;
    int gain;
    int slope;
} drc_v3_coeff_t;

typedef struct {
    //预置值
    int in_attack;
    int in_release_his;
    int out_attack;
    int out_release;
    int in_tav;
    drc_v3_coeff_t coeffs[4];

    //中间值
    int in_level;
    int in_level_r;
    int in_level_l;
    int out_gain;
} drc_v3_cb_t;


void bass_treble_coef_cal(void *eq_coef, int gain, int mode);       //gain:-24dB~24dB, mode:0(bass), 1(treble)
void eq_coef_cal(void *eq_coef, int gain);                          //index:0~7（8条EQ）, gain:-24dB~24dB


//MIX_DRC
bool drc_v3_init(const void *bin, int bin_size, drc_v3_cb_t *drc_cb); //软件drc初始化（通过资源文件）
s16 drc_v3_calc(s32 sample, drc_v3_cb_t *drc_cb);                   //软件drc pcm数据处理（每次1个样点）

//MIC_EQ
void mic_eq_set_by_param(u8 band_cnt, const u32 *eq_param);         //设置mic_eq参数，设置后才使能eq（通过EQ工具）
bool mic_eq_set_by_res(u32 addr, u32 len);                          //设置mic_eq参数，设置后才使能eq（通过资源文件）
void mic_eq_proc(u16 *input, u16 *output, u16 samples);             //mic_eq pcm数据处理（需要先设置eq参数才能启用）
void mic_eq_set_gain(u32 gain);                                     //设置mic_eq前置增益
bool mic_eq_set_is_done(void);                                      //判断上一次设置EQ是否完成，1：已完成

//MIC_DRC
bool mic_drc_set_by_res(u32 addr, u32 len, drc_v3_cb_t *drc_cb);    //设置mic_drc参数，设置后才使能drc（通过资源文件）
bool mic_drc_proc(s16 *ptr, u16 samples, drc_v3_cb_t *drc_cb);      //mic_drc pcm数据处理（需要先设置eq参数才能启用）

//DAC_EQ
void dac_eq_set_by_param(u8 band_cnt, const u32 *eq_param);         //设置dac_eq参数，设置后才使能eq（通过EQ工具）
bool dac_eq_set_by_res(u32 addr, u32 len);                          //设置dac_eq参数，设置后才使能eq（通过资源文件）
void dac_eq_set_gain(u32 gain);                                     //设置dac_eq前置增益
bool dac_eq_is_done(void);                                          //判断上一次设置EQ是否完成，1：已完成
void dac_eq_off(void);                                              //关闭dac_eq

#endif // __API_EQ_DRC_H
